'''
Questo modulo si occupa di restituire i database locali convertiti in dizionari
'''
from util import generic_converter
import urllib2
import sys
import os
from util.generic_converter import XML, JSON, TTL, CSV


FARMACIE = 'farmacieBO2011.xml'
POSTE = 'posteBO2011.ttl'
SCUOLEMATERNE = 'scuolematerneBO2011.csv'
SUPERMARKET = 'supermarketBO2011.json'

db_format = {FARMACIE : XML ,
             SUPERMARKET : JSON ,
             POSTE : TTL ,
             SCUOLEMATERNE : CSV}

'''
Dato il nome del database restituisco i dai in esso contenuti nel suo formato nativo

@param db_name: nome del database da leggere
@return: dati in formato json/xml/csv/ttl
'''
def read_db(db_name):
    try:
        #provo  a leggere il database secondo la struttura di cartelle di Django
        raw_data = open('TechWebDjango/src/TechWebDjango/media/' + db_name).read()
    except:
        #provo  a leggere il database secondo la struttura starndard di python 
        #(ovvero prende il file dalla cartella stessa in cui si trova questa funzione)
        raw_data = open(module_path()+'/'+db_name).read()
        
    return raw_data

'''
Dato il nome del database restituisco i dai in esso contenuti come dizionario di Location

@param db_name: nome del database da leggere
@return: dizionario di Location
'''
def get(db_name):
    raw_data = read_db(db_name)
    mime_type = db_format[db_name]
    return generic_converter.convert2locations(raw_data, mime_type)

'''
Restituisce il path assouluto di questo file, serve a posizionare in modo assoluto
i database

@return: Path assouluto della cartella che contiene questo file
'''
def module_path():
    encoding = sys.getfilesystemencoding()
    # All of the modules are built-in to the interpreter, e.g., by py2exe
    if hasattr(sys, "frozen"):
        return os.path.dirname(unicode(sys.executable, encoding))
    return os.path.dirname(unicode(__file__, encoding))

def test():
    print get(FARMACIE)
    print get(SCUOLEMATERNE)
    print get(SUPERMARKET)
    print get(POSTE)
    


def test2():
    richiesta = urllib2.Request("http://127.0.0.1:8000/farmacie/name/contains/Aicardi")
    locations = generic_converter.convert2locations(urllib2.urlopen(richiesta).read(),'application/xml')
    print locations.values()
    
